zoom APIを使ってLambdaから毎回違うIDで定期的に部屋を作る #zoom
せーのでございます。
今回はzoom APIを使って会議用の部屋を作ってみます。
どうして?
現在社内では会議ソリューションとしてGoogle Meetとzoomの2つが使われています。
zoomで定期的に会議を開くには「スケジュール」から部屋を作ればOKです。
ただこの場合、ミーティングIDは自分の個人IDか、独自に振ったID、どちらにしても毎週同じものが使われます。
ミーティングのURLはミーティングIDで一意になるので、毎回同じミーティングIDになる場合、もし社外にこのURLが漏れてしまうと、関係ない人がこっそり入ってこられることになります。
そこで今回は、zoom APIとLambdaを使って、毎回違うIDで定期的に部屋を作ってみたいと思います。
要するに、こういうこと
zoomのスケジュール機能を使うと毎回同じIDで部屋が作られますが
Lambdaから毎週zoomのAPIを叩いてやれば、都度違うIDで部屋が作られる、というわけです。
やってみた
それではやっていきましょう。手順としては
- zoomのAppを作る
- LambdaからそのAppの設定に従ってzoomのAPIを叩く
と非常にシンプルです。
zoomのAppを作る
最初にzoomのAPIが使えるようにAppを作ります。AppはzoomのMarketPlaceというところにあります。
持っているアカウントでログインしたら「Develop」トグルボタンより「Build App」をクリックします。
作るAppの種類が表示されます。ブラウザから操作するような場合は「OAuth」を選びます。今回はLambdaから毎回自動で作りたいので、都度認証のいらない「JWT」を選びます。「Create」ボタンをクリックします。
アプリの名前をつけます。ここは任意です。
会社情報や担当者のアドレスなどを「Information」のタブで入力します。
入力したら「App Credentials」に移動します。
ここに連携に必要な情報が入っています。今回はサンプルなのでそのままトークンを使います。本番ではAPI KeyとAPI Secretから作ります。
「View JWT Token」のリンクをクリックすると下にトークンが表示されます。「Expire in」はトークンの使用期限ですので、使う期間を指定して、トークンをコピーしてください。
使うAPIのドキュメントを見る
今回は部屋を作りたいので「meeting API」の中の「Creating meeting」というAPIを使います。
このAPIに必要なのはまず「User ID」です。これはzoomにログインするときのメールアドレスのことです。
次にbodyに必要な情報を書いたjsonを送ってあげます。
{ "topic": "string", "type": "integer", "start_time": "string [date-time]", "duration": "integer", "timezone": "string", "password": "string", "agenda": "string", "recurrence": { "type": "integer", "repeat_interval": "integer", "weekly_days": "string", "monthly_day": "integer", "monthly_week": "integer", "monthly_week_day": "integer", "end_times": "integer", "end_date_time": "string [date-time]" }, "settings": { "host_video": "boolean", "participant_video": "boolean", "cn_meeting": "boolean", "in_meeting": "boolean", "join_before_host": "boolean", "mute_upon_entry": "boolean", "watermark": "boolean", "use_pmi": "boolean", "approval_type": "integer", "registration_type": "integer", "audio": "string", "auto_recording": "string", "enforce_login": "boolean", "enforce_login_domains": "string", "alternative_hosts": "string", "global_dial_in_countries": [ "string" ], "registrants_email_notification": "boolean" } }
かなり細かいところまで指定できるのですが、今回作る上で必要な情報は
パラメータ名 | 概要 |
---|---|
topic | 会議の名前 |
type | 会議のタイプ。即時に作るときは1。時間指定で予約するときは2。 |
start_tyme | 開始時間。YYYY-MM-DD T HH:mm:ss形式で書く |
timezone | タイムゾーン。日本はAsia/Tokyo |
settings/use_pmi | PMI(Personal Meeting ID。自分の個人ID)を使うかどうか。falseに設定 |
これくらいになります。これらの情報を
こんな感じでJSONにまとめて投げてあげればOKです。
それではコードを書いていきましょう。
Lambdaを作る
それではLambdaを書いていきます。特に他のAWSサービスとはつなげませんので、ごくごくシンプルに。
側ができたら、コードを書いていきます。今回はzoom APIを叩くのでモジュールとして「request」を使います。ローカルで任意にディレクトリを作り、そこにnpmを使って「request」をインストールした上で「index.js」というファイルを作成、中身を書いたらzipに固めてアップロード、という手順です。
npm install request
var request = require("request"); exports.handler = (event, context, callback) => { var options = { method: 'POST', url: 'https://api.zoom.us/v2/users/[email protected]/meetings', headers: { authorization: 'Bearer <ここにJWTのトークンを貼る>' // Do not publish or share your token publicly. }, json: { "topic": "Weekly Meeting", "type": "2", "start_time": "2020-04-27T18:30:00", "timezone": "Asia/Tokyo", "settings": { "use_pmi": "false" } } }; request(options, function (error, response, body) { if (error) throw new Error(error); callback(null,body); }); };
これでOKです。シンプルですね。メールアドレスやトークンは皆さんのものと置き換えてお使いください。
Lambdaを叩くとこのような結果が返ってきます。
この「id」の値がLambdaを叩くたびに変わります。そして参加者はこのidを使ったURL「join_url」を使ってアクセスするので、この値が毎回変わるとセキュアですね。
「join_url」をミーティングの参加者に通知してあげると、参加することができますので、戻り値をJsonパースしてこのjoin_urlの値を拾ってあげて、Slackなどで通知してあげると良いですね。Slackへの通知はこんな記事がありますので参考になさってください。
Lambdaを叩いたあとにSlackを開いてみると
このように、部屋が取れている事がわかります。
まとめ
ということで今回はAPIを使ってzoomの部屋を取ってみました。応用すればSlackからのコマンドでzoomの部屋を取ったり、Google Calendarに特定のキーワードを入れると自動的にzoomの部屋を取ってくれたり(Meetでいいじゃん、とか言わない)、色々使い勝手が広がります。
仕事でzoomミーティングを使う時などに参考にしてみてください。